<template>
	<div class="table-demo-container layout-padding">
		<div class="table-demo-padding layout-padding-view layout-padding-auto">
			<div style="display: flex;justify-content: space-between;flex: 1;">
				<div class="left" style="width: 49%;height:100%;border: 1px solid #e4e4e4;padding: 10px;border-radius: 4px;">左</div>
				<div class="right" style="width: 50%;height:100%;border: 1px solid #e4e4e4;padding: 10px;border-radius: 4px;">
					<el-button size="default" type="success" @click="onTableEditRow"
						style="margin-bottom: 15px;">
						<el-icon>
							<ele-FolderAdd />
						</el-icon>
						{{ $t('message.btnName.newTopLevelArea') }}
					</el-button>
					<Table ref="tableRef" v-bind="state.tableData" class="table-demo" @delRow="onTableDelRow"
						@editRow="onTableEditRow" @addRow="onTableAddChildrenRow" @pageChange="onTablePageChange"
						@sortHeader="onSortHeader" />

				</div>
			</div>
		</div>
		<editComponent ref="dialogRef" @refresh="getTableData()" />
		<addChildrenComponent ref="addDialogRef" @refresh="getTableData()" />
	</div>
</template>

<script setup lang="ts">
import { defineAsyncComponent, reactive, ref, onMounted, provide } from 'vue';
import { ElMessage } from 'element-plus';
import { useAccessPointDeleteApi, useAccessPointPageApi } from '/@/api/access/point';
import { useAccessAreaTreeApi } from '/@/api/access/area';
import { RefType } from '/@/types/global';


const dialogRef = ref<RefType>();
const addDialogRef = ref<RefType>();
const editComponent = defineAsyncComponent(() => import('./editDialog.vue'));
const addChildrenComponent = defineAsyncComponent(() => import('./addChildrenDialog.vue'));

// 引入组件
const Table = defineAsyncComponent(() => import('/@/views/access/area/table/index.vue'));

// 定义变量内容
const tableRef = ref<RefType>();
const state = reactive<TableDemoState>({
	tableData: {
		// 列表数据（必传）
		data: [],
		// 表头内容（必传，注意格式
		header: [
			{ key: 'name', colWidth: '', title: '区域名称', type: 'text', isCheck: true, sortable: true },
			{ key: 'code', colWidth: '', title: '区域编号', type: 'text', isCheck: true, sortable: true },
			{ key: 'height', colWidth: '', title: '宽度', type: 'text', isCheck: true, sortable: true },
			{ key: 'width', colWidth: '', title: '高度', type: 'text', isCheck: true, sortable: true },
			{ key: 'latitude', colWidth: '', title: '纬度', type: 'text', isCheck: true, sortable: true },
			{ key: 'longitude', colWidth: '', title: '经度', type: 'text', isCheck: true, sortable: true },
		],
		// 配置项（必传）
		config: {
			total: 0, // 列表总数
			loading: true, // loading 加载
			isBorder: true, // 是否显示表格边框
			isSerialNo: false, // 是否显示表格序号
			isSelection: false, // 是否显示表格多选
			isOperate: true, // 是否显示表格操作栏
		},
		// 搜索表单，动态生成（传空数组时，将不显示搜索，注意格式）
		search: [
			{ label: '名称', prop: 'name', placeholder: '请输入名称', required: false, type: 'input', defaultValue: '' },
			{ label: '序列号', prop: 'code', placeholder: '请输入序列号', required: false, type: 'input', defaultValue: '' },
		],
		// 搜索参数（不用传，用于分页、搜索时传给后台的值，`getTableData` 中使用）
		param: {
			parentCode: '',
			pageNum: 1,
			pageSize: 10,
		},
		// 打印标题
		printName: '打印示例',
	},
});

// 初始化列表数据
const getTableData = () => {
	state.tableData.config.loading = true;
	state.tableData.data = [];
	useAccessAreaTreeApi(state.tableData.param.parentCode).then(({ content }) => {
		state.tableData.data = content
		state.tableData.param.pageSize = content.pageSize
		state.tableData.param.pageNum = content.pageNum
		state.tableData.config.total = content.total
	})
	// 数据总数（模拟，真实从接口取）
	state.tableData.config.loading = false;
};

// 删除当前项回调
const onTableDelRow = (row: EmptyObjectType) => {
	useAccessPointDeleteApi(row.code).then(() => {
		ElMessage.success(`删除${row.name}成功！`);
		getTableData();
	})

};
// 编辑当前项回调
const onTableEditRow = (row: EmptyObjectType) => {
	if (row) {
		dialogRef.value.openDialog(row.code);
	} else {
		dialogRef.value.openDialog();
	}
};

//新增顶级区域
const onTableAddChildrenRow = (row: EmptyObjectType) => {
	if (row) {
		addDialogRef.value.openDialog(row);
	}
};
// 分页改变时回调
const onTablePageChange = (page: TableDemoPageType) => {
	state.tableData.param.pageNum = page.pageNum;
	state.tableData.param.pageSize = page.pageSize;
	getTableData();
};
// 拖动显示列排序回调
const onSortHeader = (data: TableHeaderType[]) => {
	state.tableData.header = data;
};
// 页面加载时
onMounted(() => {
	getTableData();
});
</script>

<style scoped lang="scss">
.table-demo-container {
	.table-demo-padding {
		padding: 15px;

		.table-demo {
			flex: 1;
			overflow: hidden;
		}
	}
}

.menu-left {
	height: 650px;
	margin-right: 15px;
	overflow-y: auto;
	padding: 0 5px 30px 0;
	min-width: 300px;
}
</style>
